/**
 * 路径工具函数 - 为info-update插件提供Electron兼容的路径处理
 * 确保在开发环境和打包环境中都能正确工作
 */

const path = require('path');
const fs = require('fs');

/**
 * 获取应用数据目录
 * 在Electron环境中使用app.getPath('userData')，否则使用当前目录
 */
function getAppDataPath() {
    try {
        // 检查是否在Electron环境中
        if (typeof window !== 'undefined' && window.electronAPI) {
            // 使用Electron的userData路径
            return window.electronAPI.getPath('userData');
        } else if (typeof require !== 'undefined') {
            // 尝试获取Electron的app模块
            try {
                const { app } = require('electron');
                return app.getPath('userData');
            } catch (e) {
                // 不在Electron环境中，使用项目根目录
                return process.cwd();
            }
        } else {
            // 浏览器环境，返回空字符串
            return '';
        }
    } catch (error) {
        console.warn('获取应用数据路径失败，使用默认路径:', error.message);
        return process.cwd();
    }
}

/**
 * 获取插件根目录路径
 * 在不同环境中正确定位插件目录
 */
function getPluginRootPath() {
    try {
        // 检查是否在Electron打包环境中
        if (typeof window !== 'undefined' && window.electronAPI) {
            // 在Electron打包环境中，插件位于程序安装根目录下的src/plugins
            // 使用exe路径来定位程序根目录
            const exePath = window.electronAPI.getPath('exe');
            const appDir = path.dirname(exePath);
            console.log('getPluginRootPath的appDir: ', appDir)
            return path.join(appDir, 'src', 'plugins', 'info-update');
        } else if (typeof __dirname !== 'undefined') {
            // 在Node.js环境中，使用__dirname
            // __dirname指向utils目录，需要回到info-update目录
            return path.resolve(__dirname, '..');
        } else {
            // 浏览器环境，使用相对路径
            return 'src/plugins/info-update';
        }
    } catch (error) {
        console.warn('获取插件根目录失败，使用默认路径:', error.message);
        return 'src/plugins/info-update';
    }
}

/**
 * 获取数据存储目录路径
 * 为每个子模块创建独立的数据目录（在插件目录下的data文件夹）
 */
function getDataPath(moduleName) {
    const pluginRoot = getPluginRootPath();
    const dataDir = path.join(pluginRoot, moduleName, 'data');
    console.log('getDataPath的dataDir: ', dataDir)
    // 确保目录存在
    try {
        if (!fs.existsSync(dataDir)) {
            fs.mkdirSync(dataDir, { recursive: true });
        }
    } catch (error) {
        console.error(`创建数据目录失败: ${dataDir}`, error);
    }
    
    return dataDir;
}

/**
 * 获取模板文件路径
 * 确保在不同环境中都能找到模板文件
 */
function getTemplatePath(templateName = 'template.docx') {
    const pluginRoot = getPluginRootPath();
    return path.join(pluginRoot, 'tech-update', templateName);
}

/**
 * 获取子模块的数据目录路径
 * 用于tech-update模块读取其他模块生成的数据
 */
function getModuleDataPath(moduleName) {
    return getDataPath(moduleName);
}

/**
 * 检查路径是否存在
 */
function pathExists(filePath) {
    try {
        return fs.existsSync(filePath);
    } catch (error) {
        console.error(`检查路径存在性失败: ${filePath}`, error);
        return false;
    }
}

/**
 * 创建目录（如果不存在）
 */
function ensureDirectoryExists(dirPath) {
    try {
        if (!fs.existsSync(dirPath)) {
            fs.mkdirSync(dirPath, { recursive: true });
            return true;
        }
        return true;
    } catch (error) {
        console.error(`创建目录失败: ${dirPath}`, error);
        return false;
    }
}

/**
 * 获取浏览器可执行文件路径
 * 动态检测系统中可用的浏览器
 */
function getBrowserExecutablePath() {
    const possiblePaths = [
        // Edge浏览器路径
        'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe',
        'C:\\Program Files\\Microsoft\\Edge\\Application\\msedge.exe',
        // Chrome浏览器路径
        'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
        'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
        // 其他可能的路径
        process.env.LOCALAPPDATA + '\\Microsoft\\Edge\\Application\\msedge.exe',
        process.env.PROGRAMFILES + '\\Microsoft\\Edge\\Application\\msedge.exe',
        process.env['PROGRAMFILES(X86)'] + '\\Microsoft\\Edge\\Application\\msedge.exe'
    ];
    
    for (const browserPath of possiblePaths) {
        if (browserPath && pathExists(browserPath)) {
            return browserPath;
        }
    }
    
    // 如果都找不到，返回null让Playwright使用默认浏览器
    return null;
}

/**
 * 规范化路径分隔符
 * 确保在不同操作系统中路径格式正确
 */
function normalizePath(filePath) {
    return path.normalize(filePath);
}

module.exports = {
    getAppDataPath,
    getPluginRootPath,
    getDataPath,
    getTemplatePath,
    getModuleDataPath,
    pathExists,
    ensureDirectoryExists,
    getBrowserExecutablePath,
    normalizePath
};